class Request {
    constructor(options = {}) {
      // 请求的根路径
      this.baseUrl = options.baseUrl || ''
      // 请求的 url 地址
      this.url = options.url || ''
      // 请求方式
      this.method = 'GET'
      // 请求的参数对象
      this.data = null
      // header 请求头
      this.header = options.header || {}
      this.beforeRequest = null
      this.afterRequest = null
    }
  
    get(url, data = {}) {
      this.method = 'GET'
      this.url = this.baseUrl + url
      this.data = data
      return this._()
    }
  
    post(url, data = {}) {
      this.method = 'POST'
      this.url = this.baseUrl + url
      this.data = data
      return this._()
    }
  
    put(url, data = {}) {
      this.method = 'PUT'
      this.url = this.baseUrl + url
      this.data = data
      return this._()
    }
  
    delete(url, data = {}) {
      this.method = 'DELETE'
      this.url = this.baseUrl + url
      this.data = data
      return this._()
    }
  
    _() {
      // 清空 header 对象
      this.header = {}
      // 请求之前做一些事
      this.beforeRequest && typeof this.beforeRequest === 'function' && this.beforeRequest(this)
      // 发起请求
      return new Promise((resolve, reject) => {
        let weixin = wx
        // 适配 uniapp
        if ('undefined' !== typeof uni) {
          weixin = uni
        }
        weixin.request({
          url: this.url,
          method: this.method,
          data: this.data,
          header: this.header,
          success: (res) => { resolve(res) },
          fail: (err) => { reject(err) },
          complete: (res) => {
            // 请求完成以后做一些事情
            this.afterRequest && typeof this.afterRequest === 'function' && this.afterRequest(res)
            console.log('请求完成以后做一些事情', res)
            if (res?.errMsg && res?.errMsg == "request:fail ") {
                wx.showToast({
                  title: '网络错误',
                  icon: 'none'
                })
            }
            if (res.statusCode == 500 || res.data.code == -3) {
                wx.clearStorageSync('token')
                wx.clearStorageSync('userinfo')
                // wx.showToast({
                //   title: '登录失效，请重新登录！',
                // })
            }
          }
        })
      })
    }
  }
  
  export const $http = new Request()